package com.bit.cfdi.web.services;

import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

import com.bit.cfdi.web.dao.NegocioDAO;
import com.bit.cfdi.web.domain.CampoExtraComprobante;
import com.bit.cfdi.web.domain.DBConstants;
import com.bit.cfdi.web.domain.Negocio;
import com.bit.cfdi.web.domain.Serie;
import com.bit.cfdi.web.domain.Sucursal;

@Service
public class NegocioService {

	@Autowired
	private NegocioDAO negocioDAO;
	
	public void save(final Negocio negocio) throws DataAccessException {
		negocio.setStatus(DBConstants.STATUS_ACTIVE);
		negocioDAO.save(negocio);
	}

	public void delete(final Negocio negocio) throws DataAccessException {
		negocio.setStatus(DBConstants.STATUS_DELETED);
		Set<Sucursal> sucursales = negocio.getSucursales();
		for(Sucursal currentSucursal : sucursales) {
			Set<Serie> series = currentSucursal.getSeries();
			for(Serie currentSerie: series) {
				currentSerie.setStatus(DBConstants.STATUS_DELETED);
			}
		}
		negocioDAO.save(negocio);
	}

	public Negocio findNegocio(final String rfc, final String nombreNegocio,
			final String razonSocial) throws DataAccessException {
		return negocioDAO.findNegocio(rfc, nombreNegocio, razonSocial);
	}

	public List<Negocio> getAll() throws DataAccessException {
		return negocioDAO.getAll();
	}

	public Set<CampoExtraComprobante> getCamposExtras(Negocio negocio) throws DataAccessException {		
		return negocioDAO.getCamposExtras(negocio);
	}

	public List<Negocio> findNegocioWithRFCRazon(final String rfc, 
			final String razonSocial) throws DataAccessException {
		return negocioDAO.findNegocioWithRFCRazon(rfc, razonSocial);
	}

}
